package com.hollysys.usersync.feign;


import com.hollysys.usersync.entity.Response;
import com.hollysys.usersync.entity.platform.Post;
import com.hollysys.usersync.entity.platform.RelUser;
import com.hollysys.usersync.entity.platform.User;
import com.hollysys.usersync.entity.platform.UserPost;
import feign.Headers;
import feign.Param;
import feign.RequestLine;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import java.util.List;

/**
 * 实时、历史数查询接口
 *
 * @author Jeremy Yim
 * @date 2022-11-09
 */
@Validated
@Headers({"Content-Type: application/json", "Accept: application/json"})
public interface AuthServiceInvoker {

    /**
     * 获得岗位全量列表
     *
     * @param token Token
     * @return 岗位列表
     */
    @RequestLine("GET /api/post")
    @Headers("Authorization: {token}")
    Response<List<Post>> getPostList(@Param("token") String token);

    /**
     * 添加岗位
     *
     * @param postEntity 岗位信息实体
     * @param token      Token
     * @return 添加结果
     */
    @RequestLine("POST /api/post")
    @Headers("Authorization: {token}")
    Response<String> addPost(@Valid Post postEntity, @Param("token") String token);

    /**
     * 修改岗位
     *
     * @param postEntity 岗位信息实体
     * @param token      Token
     * @return 修改结果
     */
    @RequestLine("PUT /api/post")
    @Headers("Authorization: {token}")
    Response<String> updatePost(@Valid Post postEntity, @Param("token") String token);

    /**
     * 删除岗位
     *
     * @param postId 岗位ID
     * @param token  Token
     * @return 删除结果
     */
    @RequestLine("DELETE /api/post/{postId}")
    @Headers("Authorization: {token}")
    Response<String> deletePost(@Param("postId") String postId, @Param("token") String token);

    /**
     * 添加岗位用户
     *
     * @param relEntity 岗位用户关联实体
     * @param token     Token
     * @return 添加结果
     */
    @RequestLine("POST /api/post/users")
    @Headers("Authorization: {token}")
    Response<String> addPostUser(@Valid RelUser relEntity, @Param("token") String token);

    /**
     * 获取用户列表
     *
     * @param token Token
     * @return 用户列表
     */
    @RequestLine("GET /api/users?page=1&pageSize=1000")
    @Headers("Authorization: {token}")
    Response<List<User>> getUser(@Param("token") String token);

    /**
     * 添加用户
     *
     * @param userEntity 用户信息实体
     * @param token      Token
     * @return 添加结果
     */
    @RequestLine("POST /api/users")
    @Headers("Authorization: {token}")
    Response<String> addUser(@Valid User userEntity, @Param("token") String token);

    /**
     * 修改用户
     *
     * @param userEntity 用户信息实体
     * @param token      Token
     * @return 修改结果
     */
    @RequestLine("PUT /api/users")
    @Headers("Authorization: {token}")
    Response<String> updateUser(@Valid User userEntity, @Param("token") String token);

    /**
     * 删除用户
     *
     * @param userId 用户ID
     * @param token  Token
     * @return 删除结果
     */
    @RequestLine("DELETE /api/users/{userId}")
    @Headers("Authorization: {token}")
    Response<String> deleteUser(@Param("userId") String userId, @Param("token") String token);

    /**
     * 添加用户岗位
     *
     * @param relEntity 用户岗位关联信息
     * @param token     Token
     * @return 添加结果
     */
    @RequestLine("POST /api/user/addPost")
    @Headers("Authorization: {token}")
    Response<String> addUserPost(@Valid RelUser relEntity, @Param("token") String token);

    /**
     * 修改组织用户
     *
     * @param relEntity 组织用户关联实体
     * @param token     Token
     * @return 添加结果
     */
    @RequestLine("POST /api/organizations/users")
    @Headers("Authorization: {token}")
    Response<String> addOrgUser(@Valid RelUser relEntity, @Param("token") String token);

}
